home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / mint / mgr / sparcmgr / src.zoo / src / oblit / pixel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-01-24  |  1.3 KB  |  50 lines

  1. /*                        Copyright (c) 1988 Bellcore
  2.  *                            All Rights Reserved
  3.  *       Permission is granted to copy or use this program, EXCEPT that it
  4.  *       may not be sold for profit, the copyright notice must be reproduced
  5.  *       on copies, and credit should be given to Bellcore where it is due.
  6.  *       BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM.
  7.  */
  8. /*    $Header: pixel.c,v 4.1 88/06/21 13:08:06 bianchi Exp $
  9.     $Source: /tmp/mgrsrc/src/oblit/RCS/pixel.c,v $
  10. */
  11. static char    RCSid_[] = "$Source: /tmp/mgrsrc/src/oblit/RCS/pixel.c,v $$Revision: 4.1 $";
  12.  
  13. /* draw a point  16 bit version */
  14.  
  15. #include "bitmap.h"
  16.  
  17. int
  18. bit_point(map, dx, dy, func)
  19. BITMAP *map;
  20. register int dx, dy;
  21. int func;
  22. {
  23.    register int x = BIT_X(map) + dx;
  24.    register int y = BIT_Y(map) + dy;
  25.    register unsigned short *word =
  26.    BIT_DATA(map) + (y * BIT_LINE(map) + (x >> 4));
  27.    register unsigned short bit = 0x8000 >> (x & 0xf);
  28.  
  29.    if (dx < 0 || dy < 0 || dx >= BIT_WIDE(map) || dy >= BIT_HIGH(map))
  30.       return (0);
  31.  
  32.    switch (OPCODE(func)) {
  33.       case OPCODE(0):
  34.       case OPCODE(SRC):
  35.      *word &= ~bit;
  36.      break;
  37.       case OPCODE(~SRC):
  38.       case OPCODE(~SRC | DST):
  39.       case OPCODE(~0):
  40.      *word |= bit;
  41.      break;
  42.       case OPCODE(~SRC ^ DST):
  43.       case OPCODE(~DST):
  44.      *word ^= bit;
  45.      break;
  46.    }
  47.  
  48.    return (*word & bit);
  49. }
  50.